// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Service Management API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/service-management/'>Google Service Management API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170310 (799)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/service-management/'>
 *              https://cloud.google.com/service-management/</a>
 *      <tr><th>Discovery Name<td>servicemanagement
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Service Management API can be found at
 * <a href='https://cloud.google.com/service-management/'>https://cloud.google.com/service-management/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.ServiceManagement.v1
{
    /// <summary>The ServiceManagement Service.</summary>
    public class ServiceManagementService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ServiceManagementService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ServiceManagementService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            operations = new OperationsResource(this);
            services = new ServicesResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "servicemanagement"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://servicemanagement.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Service Management API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your data across Google Cloud Platform services</summary>
            public static string CloudPlatformReadOnly = "https://www.googleapis.com/auth/cloud-platform.read-only";

            /// <summary>Manage your Google API service configuration</summary>
            public static string ServiceManagement = "https://www.googleapis.com/auth/service.management";

            /// <summary>View your Google API service configuration</summary>
            public static string ServiceManagementReadonly = "https://www.googleapis.com/auth/service.management.readonly";

        }



        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        private readonly ServicesResource services;

        /// <summary>Gets the Services resource.</summary>
        public virtual ServicesResource Services
        {
            get { return services; }
        }
    }

    ///<summary>A base abstract class for ServiceManagement requests.</summary>
    public abstract class ServiceManagementBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new ServiceManagementBaseServiceRequest instance.</summary>
        protected ServiceManagementBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes ServiceManagement parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "operations" collection of methods.</summary>
    public class OperationsResource
    {
        private const string Resource = "operations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public OperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
        /// operation result at intervals as recommended by the API service.</summary>
        /// <param name="name">The name of the operation resource.</param>
        public virtual GetRequest Get(string name)
        {
            return new GetRequest(service, name);
        }

        /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
        /// operation result at intervals as recommended by the API service.</summary>
        public class GetRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string name)
                : base(service)
            {
                Name = name;
                InitParameters();
            }


            /// <summary>The name of the operation resource.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations/.+$",
                    });
            }

        }

        /// <summary>Lists service operations that match the specified filter in the request.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Lists service operations that match the specified filter in the request.</summary>
        public class ListRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.ListOperationsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>The maximum number of operations to return. If unspecified, defaults to 50. The maximum value
            /// is 100.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>A string for filtering Operations. The following filter fields are supported
            ///
            /// * serviceName Required. Only `=` operator is allowed. * startTime The time this job was started, in ISO
            /// 8601 format. Allowed operators are `>=`,  `>`, `<=`, and `<`. * status Can be `done`, `in_progress`, or
            /// `failed`. Allowed operators are `=`, and `!=`.
            ///
            /// Filter expression supports conjunction (AND) and disjunction (OR) logical operators. However, the
            /// serviceName restriction must be at the top-level and can only be combined with other restrictions via
            /// the AND logical operator.
            ///
            /// Examples
            ///
            /// * `serviceName={some-service}.googleapis.com` * `serviceName={some-service}.googleapis.com AND
            /// startTime>="2017-02-01"` * `serviceName={some-service}.googleapis.com AND status=done` * `serviceName
            /// ={some-service}.googleapis.com AND (status=done OR startTime>="2017-02-01")`</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>Not used.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Name { get; set; }

            /// <summary>The standard list page token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/operations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "services" collection of methods.</summary>
    public class ServicesResource
    {
        private const string Resource = "services";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ServicesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            configs = new ConfigsResource(service);
            rollouts = new RolloutsResource(service);

        }

        private readonly ConfigsResource configs;

        /// <summary>Gets the Configs resource.</summary>
        public virtual ConfigsResource Configs
        {
            get { return configs; }
        }

        /// <summary>The "configs" collection of methods.</summary>
        public class ConfigsResource
        {
            private const string Resource = "configs";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ConfigsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Creates a new service configuration (version) for a managed service. This method only stores
            /// the service configuration. To roll out the service configuration to backend systems please call
            /// CreateServiceRollout.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            public virtual CreateRequest Create(Google.Apis.ServiceManagement.v1.Data.Service body, string serviceName)
            {
                return new CreateRequest(service, body, serviceName);
            }

            /// <summary>Creates a new service configuration (version) for a managed service. This method only stores
            /// the service configuration. To roll out the service configuration to backend systems please call
            /// CreateServiceRollout.</summary>
            public class CreateRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Service>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.Service body, string serviceName)
                    : base(service)
                {
                    ServiceName = serviceName;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ServiceManagement.v1.Data.Service Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/configs"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Gets a service configuration (version) for a managed service.</summary>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            /// <param name="configId">The id of the service
            /// configuration resource.</param>
            public virtual GetRequest Get(string serviceName, string configId)
            {
                return new GetRequest(service, serviceName, configId);
            }

            /// <summary>Gets a service configuration (version) for a managed service.</summary>
            public class GetRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Service>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string serviceName, string configId)
                    : base(service)
                {
                    ServiceName = serviceName;
                    ConfigId = configId;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }

                /// <summary>The id of the service configuration resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("configId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ConfigId { get; private set; }

                /// <summary>Specifies which parts of the Service Config should be returned in the response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ViewEnum> View { get; set; }

                /// <summary>Specifies which parts of the Service Config should be returned in the response.</summary>
                public enum ViewEnum
                {
                    [Google.Apis.Util.StringValueAttribute("BASIC")]
                    BASIC,
                    [Google.Apis.Util.StringValueAttribute("FULL")]
                    FULL,
                }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/configs/{configId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "configId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "configId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "view", new Google.Apis.Discovery.Parameter
                        {
                            Name = "view",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Lists the history of the service configuration for a managed service, from the newest to the
            /// oldest.</summary>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            public virtual ListRequest List(string serviceName)
            {
                return new ListRequest(service, serviceName);
            }

            /// <summary>Lists the history of the service configuration for a managed service, from the newest to the
            /// oldest.</summary>
            public class ListRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.ListServiceConfigsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string serviceName)
                    : base(service)
                {
                    ServiceName = serviceName;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }

                /// <summary>The max number of items to include in the response list.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>The token of the page to retrieve.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/configs"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Creates a new service configuration (version) for a managed service based on user-supplied
            /// configuration source files (for example: OpenAPI Specification). This method stores the source
            /// configurations as well as the generated service configuration. To rollout the service configuration to
            /// other services, please call CreateServiceRollout.
            ///
            /// Operation</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            public virtual SubmitRequest Submit(Google.Apis.ServiceManagement.v1.Data.SubmitConfigSourceRequest body, string serviceName)
            {
                return new SubmitRequest(service, body, serviceName);
            }

            /// <summary>Creates a new service configuration (version) for a managed service based on user-supplied
            /// configuration source files (for example: OpenAPI Specification). This method stores the source
            /// configurations as well as the generated service configuration. To rollout the service configuration to
            /// other services, please call CreateServiceRollout.
            ///
            /// Operation</summary>
            public class SubmitRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
            {
                /// <summary>Constructs a new Submit request.</summary>
                public SubmitRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.SubmitConfigSourceRequest body, string serviceName)
                    : base(service)
                {
                    ServiceName = serviceName;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ServiceManagement.v1.Data.SubmitConfigSourceRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "submit"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/configs:submit"; }
                }

                /// <summary>Initializes Submit parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly RolloutsResource rollouts;

        /// <summary>Gets the Rollouts resource.</summary>
        public virtual RolloutsResource Rollouts
        {
            get { return rollouts; }
        }

        /// <summary>The "rollouts" collection of methods.</summary>
        public class RolloutsResource
        {
            private const string Resource = "rollouts";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public RolloutsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Creates a new service configuration rollout. Based on rollout, the Google Service Management
            /// will roll out the service configurations to different backend services. For example, the logging
            /// configuration will be pushed to Google Cloud Logging.
            ///
            /// Please note that any previous pending and running Rollouts and associated Operations will be
            /// automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts.
            ///
            /// Operation</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            public virtual CreateRequest Create(Google.Apis.ServiceManagement.v1.Data.Rollout body, string serviceName)
            {
                return new CreateRequest(service, body, serviceName);
            }

            /// <summary>Creates a new service configuration rollout. Based on rollout, the Google Service Management
            /// will roll out the service configurations to different backend services. For example, the logging
            /// configuration will be pushed to Google Cloud Logging.
            ///
            /// Please note that any previous pending and running Rollouts and associated Operations will be
            /// automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts.
            ///
            /// Operation</summary>
            public class CreateRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.Rollout body, string serviceName)
                    : base(service)
                {
                    ServiceName = serviceName;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ServiceManagement.v1.Data.Rollout Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/rollouts"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Gets a service configuration rollout.</summary>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            /// <param name="rolloutId">The id of the rollout
            /// resource.</param>
            public virtual GetRequest Get(string serviceName, string rolloutId)
            {
                return new GetRequest(service, serviceName, rolloutId);
            }

            /// <summary>Gets a service configuration rollout.</summary>
            public class GetRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Rollout>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string serviceName, string rolloutId)
                    : base(service)
                {
                    ServiceName = serviceName;
                    RolloutId = rolloutId;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }

                /// <summary>The id of the rollout resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("rolloutId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string RolloutId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/rollouts/{rolloutId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "rolloutId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "rolloutId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Lists the history of the service configuration rollouts for a managed service, from the newest
            /// to the oldest.</summary>
            /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</param>
            public virtual ListRequest List(string serviceName)
            {
                return new ListRequest(service, serviceName);
            }

            /// <summary>Lists the history of the service configuration rollouts for a managed service, from the newest
            /// to the oldest.</summary>
            public class ListRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.ListServiceRolloutsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string serviceName)
                    : base(service)
                {
                    ServiceName = serviceName;
                    InitParameters();
                }


                /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
                /// requirements.  For example: `example.googleapis.com`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ServiceName { get; private set; }

                /// <summary>The token of the page to retrieve.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The max number of items to include in the response list.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/services/{serviceName}/rollouts"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "serviceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "serviceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Creates a new managed service. Please note one producer project can own no more than 20 services.
        ///
        /// Operation</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.ServiceManagement.v1.Data.ManagedService body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new managed service. Please note one producer project can own no more than 20 services.
        ///
        /// Operation</summary>
        public class CreateRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.ManagedService body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.ManagedService Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a managed service. This method will change the service to the `Soft-Delete` state for 30
        /// days. Within this period, service producers may call UndeleteService to restore the service. After 30 days,
        /// the service will be permanently deleted.
        ///
        /// Operation</summary>
        /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
        /// requirements.  For example: `example.googleapis.com`.</param>
        public virtual DeleteRequest Delete(string serviceName)
        {
            return new DeleteRequest(service, serviceName);
        }

        /// <summary>Deletes a managed service. This method will change the service to the `Soft-Delete` state for 30
        /// days. Within this period, service producers may call UndeleteService to restore the service. After 30 days,
        /// the service will be permanently deleted.
        ///
        /// Operation</summary>
        public class DeleteRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                InitParameters();
            }


            /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Disables a service for a project, so it can no longer be be used for the project. It prevents
        /// accidental usage that may cause unexpected billing charges or security leaks.
        ///
        /// Operation</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="serviceName">Name of the service to disable. Specifying an unknown service name will cause the request
        /// to fail.</param>
        public virtual DisableRequest Disable(Google.Apis.ServiceManagement.v1.Data.DisableServiceRequest body, string serviceName)
        {
            return new DisableRequest(service, body, serviceName);
        }

        /// <summary>Disables a service for a project, so it can no longer be be used for the project. It prevents
        /// accidental usage that may cause unexpected billing charges or security leaks.
        ///
        /// Operation</summary>
        public class DisableRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Disable request.</summary>
            public DisableRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.DisableServiceRequest body, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                Body = body;
                InitParameters();
            }


            /// <summary>Name of the service to disable. Specifying an unknown service name will cause the request to
            /// fail.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.DisableServiceRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "disable"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}:disable"; }
            }

            /// <summary>Initializes Disable parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Enables a service for a project, so it can be used for the project. See [Cloud Auth
        /// Guide](https://cloud.google.com/docs/authentication) for more information.
        ///
        /// Operation</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="serviceName">Name of the service to enable. Specifying an unknown service name will cause the request
        /// to fail.</param>
        public virtual EnableRequest Enable(Google.Apis.ServiceManagement.v1.Data.EnableServiceRequest body, string serviceName)
        {
            return new EnableRequest(service, body, serviceName);
        }

        /// <summary>Enables a service for a project, so it can be used for the project. See [Cloud Auth
        /// Guide](https://cloud.google.com/docs/authentication) for more information.
        ///
        /// Operation</summary>
        public class EnableRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Enable request.</summary>
            public EnableRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.EnableServiceRequest body, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                Body = body;
                InitParameters();
            }


            /// <summary>Name of the service to enable. Specifying an unknown service name will cause the request to
            /// fail.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.EnableServiceRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "enable"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}:enable"; }
            }

            /// <summary>Initializes Enable parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Generates and returns a report (errors, warnings and changes from existing configurations)
        /// associated with GenerateConfigReportRequest.new_value
        ///
        /// If GenerateConfigReportRequest.old_value is specified, GenerateConfigReportRequest will contain a single
        /// ChangeReport based on the comparison between GenerateConfigReportRequest.new_value and
        /// GenerateConfigReportRequest.old_value. If GenerateConfigReportRequest.old_value is not specified, this
        /// method will compare GenerateConfigReportRequest.new_value with the last pushed service
        /// configuration.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual GenerateConfigReportRequest GenerateConfigReport(Google.Apis.ServiceManagement.v1.Data.GenerateConfigReportRequest body)
        {
            return new GenerateConfigReportRequest(service, body);
        }

        /// <summary>Generates and returns a report (errors, warnings and changes from existing configurations)
        /// associated with GenerateConfigReportRequest.new_value
        ///
        /// If GenerateConfigReportRequest.old_value is specified, GenerateConfigReportRequest will contain a single
        /// ChangeReport based on the comparison between GenerateConfigReportRequest.new_value and
        /// GenerateConfigReportRequest.old_value. If GenerateConfigReportRequest.old_value is not specified, this
        /// method will compare GenerateConfigReportRequest.new_value with the last pushed service
        /// configuration.</summary>
        public class GenerateConfigReportRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.GenerateConfigReportResponse>
        {
            /// <summary>Constructs a new GenerateConfigReport request.</summary>
            public GenerateConfigReportRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.GenerateConfigReportRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.GenerateConfigReportRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "generateConfigReport"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services:generateConfigReport"; }
            }

            /// <summary>Initializes GenerateConfigReport parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Gets a managed service. Authentication is required unless the service is public.</summary>
        /// <param name="serviceName">The name of the service.  See the `ServiceManager` overview for naming requirements.  For
        /// example: `example.googleapis.com`.</param>
        public virtual GetRequest Get(string serviceName)
        {
            return new GetRequest(service, serviceName);
        }

        /// <summary>Gets a managed service. Authentication is required unless the service is public.</summary>
        public class GetRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.ManagedService>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                InitParameters();
            }


            /// <summary>The name of the service.  See the `ServiceManager` overview for naming requirements.  For
            /// example: `example.googleapis.com`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a service configuration (version) for a managed service.</summary>
        /// <param name="serviceName">The name of the service.  See the [overview](/service-management/overview) for naming
        /// requirements.  For example: `example.googleapis.com`.</param>
        public virtual GetConfigRequest GetConfig(string serviceName)
        {
            return new GetConfigRequest(service, serviceName);
        }

        /// <summary>Gets a service configuration (version) for a managed service.</summary>
        public class GetConfigRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Service>
        {
            /// <summary>Constructs a new GetConfig request.</summary>
            public GetConfigRequest(Google.Apis.Services.IClientService service, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                InitParameters();
            }


            /// <summary>The name of the service.  See the [overview](/service-management/overview) for naming
            /// requirements.  For example: `example.googleapis.com`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }

            /// <summary>Specifies which parts of the Service Config should be returned in the response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Specifies which parts of the Service Config should be returned in the response.</summary>
            public enum ViewEnum
            {
                [Google.Apis.Util.StringValueAttribute("BASIC")]
                BASIC,
                [Google.Apis.Util.StringValueAttribute("FULL")]
                FULL,
            }

            /// <summary>The id of the service configuration resource.</summary>
            [Google.Apis.Util.RequestParameterAttribute("configId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ConfigId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getConfig"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}/config"; }
            }

            /// <summary>Initializes GetConfig parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "configId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "configId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets the access control policy for a resource. Returns an empty policy if the resource exists and
        /// does not have a policy set.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which the policy is being requested. See the operation
        /// documentation for the appropriate value for this field.</param>
        public virtual GetIamPolicyRequest GetIamPolicy(Google.Apis.ServiceManagement.v1.Data.GetIamPolicyRequest body, string resource)
        {
            return new GetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Gets the access control policy for a resource. Returns an empty policy if the resource exists and
        /// does not have a policy set.</summary>
        public class GetIamPolicyRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Policy>
        {
            /// <summary>Constructs a new GetIamPolicy request.</summary>
            public GetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.GetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which the policy is being requested. See the operation documentation
            /// for the appropriate value for this field.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.GetIamPolicyRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:getIamPolicy"; }
            }

            /// <summary>Initializes GetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^services/[^/]+$",
                    });
            }

        }

        /// <summary>Lists managed services.
        ///
        /// Returns all public services. For authenticated users, also returns all services the calling user has
        /// "servicemanagement.services.get" permission for.
        ///
        /// **BETA:** If the caller specifies the `consumer_id`, it returns only the services enabled on the consumer.
        /// The `consumer_id` must have the format of "project:{PROJECT-ID}".</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Lists managed services.
        ///
        /// Returns all public services. For authenticated users, also returns all services the calling user has
        /// "servicemanagement.services.get" permission for.
        ///
        /// **BETA:** If the caller specifies the `consumer_id`, it returns only the services enabled on the consumer.
        /// The `consumer_id` must have the format of "project:{PROJECT-ID}".</summary>
        public class ListRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.ListServicesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>Include services consumed by the specified consumer.
            ///
            /// The Google Service Management implementation accepts the following forms: - project:</summary>
            [Google.Apis.Util.RequestParameterAttribute("consumerId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ConsumerId { get; set; }

            /// <summary>Token identifying which result to start with; returned by a previous list call.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Requested size of the next page of data.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>Include services produced by the specified project.</summary>
            [Google.Apis.Util.RequestParameterAttribute("producerProjectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProducerProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "consumerId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "consumerId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "producerProjectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "producerProjectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Sets the access control policy on the specified resource. Replaces any existing policy.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which the policy is being specified. See the operation
        /// documentation for the appropriate value for this field.</param>
        public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.ServiceManagement.v1.Data.SetIamPolicyRequest body, string resource)
        {
            return new SetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Sets the access control policy on the specified resource. Replaces any existing policy.</summary>
        public class SetIamPolicyRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Policy>
        {
            /// <summary>Constructs a new SetIamPolicy request.</summary>
            public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.SetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which the policy is being specified. See the operation documentation
            /// for the appropriate value for this field.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.SetIamPolicyRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:setIamPolicy"; }
            }

            /// <summary>Initializes SetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^services/[^/]+$",
                    });
            }

        }

        /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not exist,
        /// this will return an empty set of permissions, not a NOT_FOUND error.
        ///
        /// Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not
        /// for authorization checking. This operation may "fail open" without warning.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which the policy detail is being requested. See the operation
        /// documentation for the appropriate value for this field.</param>
        public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.ServiceManagement.v1.Data.TestIamPermissionsRequest body, string resource)
        {
            return new TestIamPermissionsRequest(service, body, resource);
        }

        /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not exist,
        /// this will return an empty set of permissions, not a NOT_FOUND error.
        ///
        /// Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not
        /// for authorization checking. This operation may "fail open" without warning.</summary>
        public class TestIamPermissionsRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.TestIamPermissionsResponse>
        {
            /// <summary>Constructs a new TestIamPermissions request.</summary>
            public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.ServiceManagement.v1.Data.TestIamPermissionsRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which the policy detail is being requested. See the operation
            /// documentation for the appropriate value for this field.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ServiceManagement.v1.Data.TestIamPermissionsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "testIamPermissions"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:testIamPermissions"; }
            }

            /// <summary>Initializes TestIamPermissions parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^services/[^/]+$",
                    });
            }

        }

        /// <summary>Revives a previously deleted managed service. The method restores the service using the
        /// configuration at the time the service was deleted. The target service must exist and must have been deleted
        /// within the last 30 days.
        ///
        /// Operation</summary>
        /// <param name="serviceName">The name of the service. See the [overview](/service-management/overview) for naming
        /// requirements. For example: `example.googleapis.com`.</param>
        public virtual UndeleteRequest Undelete(string serviceName)
        {
            return new UndeleteRequest(service, serviceName);
        }

        /// <summary>Revives a previously deleted managed service. The method restores the service using the
        /// configuration at the time the service was deleted. The target service must exist and must have been deleted
        /// within the last 30 days.
        ///
        /// Operation</summary>
        public class UndeleteRequest : ServiceManagementBaseServiceRequest<Google.Apis.ServiceManagement.v1.Data.Operation>
        {
            /// <summary>Constructs a new Undelete request.</summary>
            public UndeleteRequest(Google.Apis.Services.IClientService service, string serviceName)
                : base(service)
            {
                ServiceName = serviceName;
                InitParameters();
            }


            /// <summary>The name of the service. See the [overview](/service-management/overview) for naming
            /// requirements. For example: `example.googleapis.com`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("serviceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ServiceName { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "undelete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/services/{serviceName}:undelete"; }
            }

            /// <summary>Initializes Undelete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "serviceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "serviceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.ServiceManagement.v1.Data
{    

    /// <summary>Generated advice about this change, used for providing more information about how a change will affect
    /// the existing service.</summary>
    public class Advice : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Useful description for why this advice was applied and what actions should be taken to mitigate any
        /// implied risks.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Api is a light-weight descriptor for a protocol buffer service.</summary>
    public class Api : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The methods of this api, in unspecified order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("methods")]
        public virtual System.Collections.Generic.IList<Method> Methods { get; set; } 

        /// <summary>Included APIs. See Mixin.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mixins")]
        public virtual System.Collections.Generic.IList<Mixin> Mixins { get; set; } 

        /// <summary>The fully qualified name of this api, including package name followed by the api's simple
        /// name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Any metadata attached to the API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>Source context for the protocol buffer service represented by this message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceContext")]
        public virtual SourceContext SourceContext { get; set; } 

        /// <summary>The source syntax of the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("syntax")]
        public virtual string Syntax { get; set; } 

        /// <summary>A version string for this api. If specified, must have the form `major-version.minor-version`, as
        /// in `1.10`. If the minor version is omitted, it defaults to zero. If the entire version field is empty, the
        /// major version is derived from the package name, as outlined below. If the field is not empty, the version in
        /// the package name will be verified to be consistent with what is provided here.
        ///
        /// The versioning schema uses [semantic versioning](http://semver.org) where the major version number indicates
        /// a breaking change and the minor version an additive, non-breaking change. Both version numbers are signals
        /// to users what to expect from different versions, and should be carefully chosen based on the product plan.
        ///
        /// The major version is also reflected in the package name of the API, which must end in `v`, as in
        /// `google.feature.v1`. For major versions 0 and 1, the suffix can be omitted. Zero major versions must only be
        /// used for experimental, none-GA apis. </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Specifies the audit configuration for a service. The configuration determines which permission types
    /// are logged, and what identities, if any, are exempted from logging. An AuditConifg must have one or more
    /// AuditLogConfigs.
    ///
    /// If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is
    /// used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each
    /// AuditConfig are exempted. Example Policy with multiple AuditConfigs: { "audit_configs": [ { "service":
    /// "allServices" "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] },
    /// { "log_type": "DATA_WRITE", }, { "log_type": "ADMIN_READ", } ] }, { "service": "fooservice@googleapis.com"
    /// "audit_log_configs": [ { "log_type": "DATA_READ", }, { "log_type": "DATA_WRITE", "exempted_members": [
    /// "user:bar@gmail.com" ] } ] } ] } For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
    /// logging. It also exempts foo@gmail.com from DATA_READ logging, and bar@gmail.com from DATA_WRITE
    /// logging.</summary>
    public class AuditConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The configuration for logging of each type of permission. Next ID: 4</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("auditLogConfigs")]
        public virtual System.Collections.Generic.IList<AuditLogConfig> AuditLogConfigs { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("exemptedMembers")]
        public virtual System.Collections.Generic.IList<string> ExemptedMembers { get; set; } 

        /// <summary>Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`,
        /// `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual string Service { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Provides the configuration for logging a type of permissions. Example:
    ///
    /// { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, {
    /// "log_type": "DATA_WRITE", } ] }
    ///
    /// This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting foo@gmail.com from DATA_READ
    /// logging.</summary>
    public class AuditLogConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities that do not cause logging for this type of permission. Follows the same
        /// format of Binding.members.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exemptedMembers")]
        public virtual System.Collections.Generic.IList<string> ExemptedMembers { get; set; } 

        /// <summary>The log type that this config enables.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logType")]
        public virtual string LogType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration for an anthentication provider, including support for [JSON Web Token
    /// (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).</summary>
    public class AuthProvider : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-
        /// token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be
        /// accepted. When this setting is absent, only JWTs with audience "https://Service_name/API_name" will be
        /// accepted. For example, if no audiences are in the setting, LibraryService API will only accept JWTs with the
        /// following audience "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
        ///
        /// Example:
        ///
        /// audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("audiences")]
        public virtual string Audiences { get; set; } 

        /// <summary>The unique identifier of the auth provider. It will be referred to by
        /// `AuthRequirement.provider_id`.
        ///
        /// Example: "bookstore_auth".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies the principal that issued the JWT. See https://tools.ietf.org/html/draft-ietf-oauth-
        /// json-web-token-32#section-4.1.1 Usually a URL or an email address.
        ///
        /// Example: https://securetoken.google.com Example: 1234567-compute@developer.gserviceaccount.com</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("issuer")]
        public virtual string Issuer { get; set; } 

        /// <summary>URL of the provider's public key set to validate signature of the JWT. See [OpenID
        /// Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). Optional if the key
        /// set document: - can be retrieved from [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-
        /// 1_0.html of the issuer. - can be inferred from the email domain of the issuer (e.g. a Google service
        /// account).
        ///
        /// Example: https://www.googleapis.com/oauth2/v1/certs</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jwksUri")]
        public virtual string JwksUri { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>User-defined authentication requirements, including support for [JSON Web Token
    /// (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).</summary>
    public class AuthRequirement : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>NOTE: This will be deprecated soon, once AuthProvider.audiences is implemented and accepted in all
        /// the runtime components.
        ///
        /// The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
        /// that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is
        /// absent, only JWTs with audience "https://Service_name/API_name" will be accepted. For example, if no
        /// audiences are in the setting, LibraryService API will only accept JWTs with the following audience "https
        /// ://library-example.googleapis.com/google.example.library.v1.LibraryService".
        ///
        /// Example:
        ///
        /// audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("audiences")]
        public virtual string Audiences { get; set; } 

        /// <summary>id from authentication provider.
        ///
        /// Example:
        ///
        /// provider_id: bookstore_auth</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("providerId")]
        public virtual string ProviderId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Authentication` defines the authentication configuration for an API.
    ///
    /// Example for an API targeted for external use:
    ///
    /// name: calendar.googleapis.com authentication: providers: - id: google_calendar_auth jwks_uri:
    /// https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: "*"
    /// requirements: provider_id: google_calendar_auth</summary>
    public class Authentication : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Defines a set of authentication providers that a service supports.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("providers")]
        public virtual System.Collections.Generic.IList<AuthProvider> Providers { get; set; } 

        /// <summary>A list of authentication rules that apply to individual API methods.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<AuthenticationRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Authentication rules for the service.
    ///
    /// By default, if a method has any authentication requirements, every request must include a valid credential
    /// matching one of the requirements. It's an error to include more than one kind of credential in a single request.
    ///
    /// If a method doesn't have any auth requirements, request credentials will be ignored.</summary>
    public class AuthenticationRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether to allow requests without a credential. The credential can be an OAuth token, Google
        /// cookies (first-party auth) or EndUserCreds.
        ///
        /// For requests without credentials, if the service control environment is specified, each incoming request
        /// **must** be associated with a service consumer. This can be done by passing an API key that belongs to a
        /// consumer project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowWithoutCredential")]
        public virtual System.Nullable<bool> AllowWithoutCredential { get; set; } 

        /// <summary>The requirements for OAuth credentials.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oauth")]
        public virtual OAuthRequirements Oauth { get; set; } 

        /// <summary>Requirements for additional authentication providers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requirements")]
        public virtual System.Collections.Generic.IList<AuthRequirement> Requirements { get; set; } 

        /// <summary>Selects the methods to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration of authorization.
    ///
    /// This section determines the authorization provider, if unspecified, then no authorization check will be done.
    ///
    /// Example:
    ///
    /// experimental: authorization: provider: firebaserules.googleapis.com</summary>
    public class AuthorizationConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the authorization provider, such as firebaserules.googleapis.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("provider")]
        public virtual string Provider { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Backend` defines the backend configuration for a service.</summary>
    public class Backend : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of API backend rules that apply to individual API methods.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<BackendRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A backend rule provides configuration for an individual API element.</summary>
    public class BackendRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The address of the API backend.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual string Address { get; set; } 

        /// <summary>The number of seconds to wait for a response from a request.  The default depends on the deployment
        /// context.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deadline")]
        public virtual System.Nullable<double> Deadline { get; set; } 

        /// <summary>Selects the methods to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Associates `members` with a `role`.</summary>
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities requesting access for a Cloud Platform resource. `members` can have the
        /// following values:
        ///
        /// * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google
        /// account.
        ///
        /// * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google
        /// account or a service account.
        ///
        /// * `user:{emailid}`: An email address that represents a specific Google account. For example,
        /// `alice@gmail.com` or `joe@example.com`.
        ///
        /// * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-
        /// app@appspot.gserviceaccount.com`.
        ///
        /// * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
        ///
        /// * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example,
        /// `google.com` or `example.com`.
        ///
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        /// Required</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Change report associated with a particular service configuration.
    ///
    /// It contains a list of ConfigChanges based on the comparison between two service configurations.</summary>
    public class ChangeReport : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of changes between two service configurations. The changes will be alphabetically sorted based
        /// on the identifier of each change. A ConfigChange identifier is a dot separated path to the configuration.
        /// Example: visibility.rules[selector='LibraryService.CreateBook'].restriction</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("configChanges")]
        public virtual System.Collections.Generic.IList<ConfigChange> ConfigChanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Write a Cloud Audit log</summary>
    public class CloudAuditOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A condition to be met.</summary>
    public class Condition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Trusted attributes supplied by the IAM system.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("iam")]
        public virtual string Iam { get; set; } 

        /// <summary>An operator to apply the subject with.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("op")]
        public virtual string Op { get; set; } 

        /// <summary>Trusted attributes discharged by the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("svc")]
        public virtual string Svc { get; set; } 

        /// <summary>Trusted attributes supplied by any service that owns resources and uses the IAM system for access
        /// control.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sys")]
        public virtual string Sys { get; set; } 

        /// <summary>DEPRECATED. Use 'values' instead.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The objects of the condition. This is mutually exclusive with 'value'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<string> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Output generated from semantically comparing two versions of a service configuration.
    ///
    /// Includes detailed information about a field that have changed with applicable advice about potential
    /// consequences for the change, such as backwards-incompatibility.</summary>
    public class ConfigChange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Collection of advice provided for this change, useful for determining the possible impact of this
        /// change.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("advices")]
        public virtual System.Collections.Generic.IList<Advice> Advices { get; set; } 

        /// <summary>The type for this change, either ADDED, REMOVED, or MODIFIED.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("changeType")]
        public virtual string ChangeType { get; set; } 

        /// <summary>Object hierarchy path to the change, with levels separated by a '.' character. For repeated fields,
        /// an applicable unique identifier field is used for the index (usually selector, name, or id). For maps, the
        /// term 'key' is used. If the field has no unique identifier, the numeric index is used. Examples: -
        /// visibility.rules[selector=="google.LibraryService.CreateBook"].restriction -
        /// quota.metric_rules[selector=="google"].metric_costs[key=="reads"].value -
        /// logging.producer_destinations[0]</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("element")]
        public virtual string Element { get; set; } 

        /// <summary>Value of the changed object in the new Service configuration, in JSON format. This field will not
        /// be populated if ChangeType == REMOVED.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newValue")]
        public virtual string NewValue { get; set; } 

        /// <summary>Value of the changed object in the old Service configuration, in JSON format. This field will not
        /// be populated if ChangeType == ADDED.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldValue")]
        public virtual string OldValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Generic specification of a source configuration file</summary>
    public class ConfigFile : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bytes that constitute the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fileContents")]
        public virtual string FileContents { get; set; } 

        /// <summary>The file name of the configuration file (full or relative path).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filePath")]
        public virtual string FilePath { get; set; } 

        /// <summary>The type of configuration file this represents.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fileType")]
        public virtual string FileType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a service configuration with its name and id.</summary>
    public class ConfigRef : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Resource name of a service config. It must have the following format: "services/{service
        /// name}/configs/{config id}".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a source file which is used to generate the service configuration defined by
    /// `google.api.Service`.</summary>
    public class ConfigSource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Set of source configuration files that are used to generate a service configuration
        /// (`google.api.Service`).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("files")]
        public virtual System.Collections.Generic.IList<ConfigFile> Files { get; set; } 

        /// <summary>A unique ID for a specific instance of this message, typically assigned by the client for tracking
        /// purpose. If empty, the server may choose to generate one instead.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Context` defines which contexts an API requests.
    ///
    /// Example:
    ///
    /// context: rules: - selector: "*" requested: - google.rpc.context.ProjectContext -
    /// google.rpc.context.OriginContext
    ///
    /// The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and
    /// `google.rpc.context.OriginContext`.
    ///
    /// Available context types are defined in package `google.rpc.context`.</summary>
    public class Context : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of RPC context rules that apply to individual API methods.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<ContextRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A context rule provides information about the context for an individual API element.</summary>
    public class ContextRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of full type names of provided contexts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("provided")]
        public virtual System.Collections.Generic.IList<string> Provided { get; set; } 

        /// <summary>A list of full type names of requested contexts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requested")]
        public virtual System.Collections.Generic.IList<string> Requested { get; set; } 

        /// <summary>Selects the methods to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Selects and configures the service controller used by the service.  The service controller handles
    /// features like abuse, quota, billing, logging, monitoring, etc.</summary>
    public class Control : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The service control environment to use. If empty, no control plane feature (like quota and billing)
        /// will be enabled.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("environment")]
        public virtual string Environment { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options for counters</summary>
    public class CounterOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The field value to attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("field")]
        public virtual string Field { get; set; } 

        /// <summary>The metric to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metric")]
        public virtual string Metric { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Customize service error responses.  For example, list any service specific protobuf types that can
    /// appear in error detail lists of error responses.
    ///
    /// Example:
    ///
    /// custom_error: types: - google.foo.v1.CustomError - google.foo.v1.AnotherError</summary>
    public class CustomError : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of custom error rules that apply to individual API messages.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<CustomErrorRule> Rules { get; set; } 

        /// <summary>The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("types")]
        public virtual System.Collections.Generic.IList<string> Types { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A custom error rule.</summary>
    public class CustomErrorRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Mark this message as possible payload in error response.  Otherwise, objects of this type will be
        /// filtered when they appear in error payload.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isErrorType")]
        public virtual System.Nullable<bool> IsErrorType { get; set; } 

        /// <summary>Selects messages to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A custom pattern is used for defining custom HTTP verb.</summary>
    public class CustomHttpPattern : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of this custom HTTP verb.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The path matched by this custom verb.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("path")]
        public virtual string Path { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Write a Data Access (Gin) log</summary>
    public class DataAccessOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Strategy used to delete a service. This strategy is a placeholder only used by the system generated
    /// rollout to delete a service.</summary>
    public class DeleteServiceStrategy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a diagnostic message (error or warning)</summary>
    public class Diagnostic : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The kind of diagnostic information provided.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>File name and line number of the error or warning.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>Message describing the error or warning.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for DisableService method.</summary>
    public class DisableServiceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The identity of consumer resource which service disablement will be applied to.
        ///
        /// The Google Service Management implementation accepts the following forms: - "project:"
        ///
        /// Note: this is made compatible with google.api.servicecontrol.v1.Operation.consumer_id.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumerId")]
        public virtual string ConsumerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Documentation` provides the information for describing a service.
    ///
    /// Example: documentation: summary: > The Google Calendar API gives access to most calendar features. pages: -
    /// name: Overview content: == include google/foo/overview.md == - name: Tutorial content: == include
    /// google/foo/tutorial.md == subpages; - name: Java content: == include google/foo/tutorial_java.md == rules: -
    /// selector: google.calendar.Calendar.Get description: > ... - selector: google.calendar.Calendar.Put description:
    /// > ...
    ///
    /// Documentation is provided in markdown syntax. In addition to standard markdown features, definition lists,
    /// tables and fenced code blocks are supported. Section headers can be provided and are interpreted relative to the
    /// section nesting of the context where a documentation fragment is embedded.
    ///
    /// Documentation from the IDL is merged with documentation defined via the config at normalization time, where
    /// documentation provided by config rules overrides IDL provided.
    ///
    /// A number of constructs specific to the API platform are supported in documentation text.
    ///
    /// In order to reference a proto element, the following notation can be used: fully.qualified.proto.name]] To
    /// override the display text used for the link, this can be used: display text]fully.qualified.proto.name] Text can
    /// be excluded from doc using the following notation: -- internal comment -- Comments can be made conditional using
    /// a visibility label. The below text will be only rendered if the `BETA` label is available: --BETA: comment for
    /// BETA users -- A few directives are available in documentation. Note that directives must appear on a single line
    /// to be properly identified. The `include` directive includes a markdown file from an external source: == include
    /// path/to/file == The `resource_for` directive marks a message to be the resource of a collection in REST view. If
    /// it is not specified, tools attempt to infer the resource from the operations in a collection: == resource_for
    /// v1.shelves.books == The directive `suppress_warning` does not directly affect documentation and is documented
    /// together with service config validation.</summary>
    public class Documentation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The URL to the root of documentation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentationRootUrl")]
        public virtual string DocumentationRootUrl { get; set; } 

        /// <summary>Declares a single overview page. For example: documentation: summary: ... overview: == include
        /// overview.md ==
        ///
        /// This is a shortcut for the following declaration (using pages style): documentation: summary: ... pages: -
        /// name: Overview content: == include overview.md ==
        ///
        /// Note: you cannot specify both `overview` field and `pages` field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("overview")]
        public virtual string Overview { get; set; } 

        /// <summary>The top level pages for the documentation set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pages")]
        public virtual System.Collections.Generic.IList<Page> Pages { get; set; } 

        /// <summary>A list of documentation rules that apply to individual API elements.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<DocumentationRule> Rules { get; set; } 

        /// <summary>A short summary of what the service does. Can only be provided by plain text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("summary")]
        public virtual string Summary { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A documentation rule provides information about individual API elements.</summary>
    public class DocumentationRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Deprecation description of the selected element(s). It can be provided if an element is marked as
        /// `deprecated`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deprecationDescription")]
        public virtual string DeprecationDescription { get; set; } 

        /// <summary>Description of the selected API(s).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The selector is a comma-separated list of patterns. Each pattern is a qualified name of the element
        /// which may end in "*", indicating a wildcard. Wildcards are only allowed at the end and for a whole component
        /// of the qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To specify a default for all
        /// applicable elements, the whole pattern "*" is used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for EnableService method.</summary>
    public class EnableServiceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The identity of consumer resource which service enablement will be applied to.
        ///
        /// The Google Service Management implementation accepts the following forms: - "project:"
        ///
        /// Note: this is made compatible with google.api.servicecontrol.v1.Operation.consumer_id.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumerId")]
        public virtual string ConsumerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of
    /// endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring
    /// configuration.
    ///
    /// Example service configuration:
    ///
    /// name: library-example.googleapis.com endpoints: # Below entry makes 'google.example.library.v1.Library' # API be
    /// served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to
    /// the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name:
    /// library-example.googleapis.com allow_cors: true</summary>
    public class Endpoint : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple
        /// google.api.Endpoint for each of the intented alias.
        ///
        /// Additional names that this endpoint will be hosted on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aliases")]
        public virtual System.Collections.Generic.IList<string> Aliases { get; set; } 

        /// <summary>Allowing [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka cross-domain
        /// traffic, would allow the backends served from this endpoint to receive and respond to HTTP OPTIONS requests.
        /// The response will be used by the browser to determine whether the subsequent cross-origin request is allowed
        /// to proceed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowCors")]
        public virtual System.Nullable<bool> AllowCors { get; set; } 

        /// <summary>The list of APIs served by this endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("apis")]
        public virtual System.Collections.Generic.IList<string> Apis { get; set; } 

        /// <summary>The list of features enabled on this endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("features")]
        public virtual System.Collections.Generic.IList<string> Features { get; set; } 

        /// <summary>The canonical name of this endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Enum type definition.</summary>
    public class Enum : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Enum value definitions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enumvalue")]
        public virtual System.Collections.Generic.IList<EnumValue> Enumvalue { get; set; } 

        /// <summary>Enum type name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Protocol buffer options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>The source context.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceContext")]
        public virtual SourceContext SourceContext { get; set; } 

        /// <summary>The source syntax.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("syntax")]
        public virtual string Syntax { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Enum value definition.</summary>
    public class EnumValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Enum value name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Enum value number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual System.Nullable<int> Number { get; set; } 

        /// <summary>Protocol buffer options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Experimental service configuration. These configuration options can only be used by whitelisted
    /// users.</summary>
    public class Experimental : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Authorization configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("authorization")]
        public virtual AuthorizationConfig Authorization { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single field of a message type.</summary>
    public class Field : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The field cardinality.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cardinality")]
        public virtual string Cardinality { get; set; } 

        /// <summary>The string value of the default value of this field. Proto2 syntax only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultValue")]
        public virtual string DefaultValue { get; set; } 

        /// <summary>The field JSON name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jsonName")]
        public virtual string JsonName { get; set; } 

        /// <summary>The field type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The field name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The field number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual System.Nullable<int> Number { get; set; } 

        /// <summary>The index of the field type in `Type.oneofs`, for message or enumeration types. The first type has
        /// index 1; zero means the type is not in the list.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oneofIndex")]
        public virtual System.Nullable<int> OneofIndex { get; set; } 

        /// <summary>The protocol buffer options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>Whether to use alternative packed wire representation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("packed")]
        public virtual System.Nullable<bool> Packed { get; set; } 

        /// <summary>The field type URL, without the scheme, for message or enumeration types. Example:
        /// `"type.googleapis.com/google.protobuf.Timestamp"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("typeUrl")]
        public virtual string TypeUrl { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for GenerateConfigReport method.</summary>
    public class GenerateConfigReportRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Service configuration for which we want to generate the report. For this version of API, the
        /// supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource,
        /// and google.api.Service</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newConfig")]
        public virtual System.Collections.Generic.IDictionary<string,object> NewConfig { get; set; } 

        /// <summary>Service configuration against which the comparison will be done. For this version of API, the
        /// supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource,
        /// and google.api.Service</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldConfig")]
        public virtual System.Collections.Generic.IDictionary<string,object> OldConfig { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for GenerateConfigReport method.</summary>
    public class GenerateConfigReportResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>list of ChangeReport, each corresponding to comparison between two service
        /// configurations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("changeReports")]
        public virtual System.Collections.Generic.IList<ChangeReport> ChangeReports { get; set; } 

        /// <summary>Errors / Linter warnings associated with the service definition this report belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diagnostics")]
        public virtual System.Collections.Generic.IList<Diagnostic> Diagnostics { get; set; } 

        /// <summary>ID of the service configuration this report belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Name of the service this report belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceName")]
        public virtual string ServiceName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `GetIamPolicy` method.</summary>
    public class GetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines the HTTP configuration for a service. It contains a list of HttpRule, each specifying the
    /// mapping of an RPC method to one or more HTTP REST API methods.</summary>
    public class Http : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of HTTP configuration rules that apply to individual API methods.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<HttpRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`HttpRule` defines the mapping of an RPC method to one or more HTTP REST APIs.  The mapping determines
    /// what portions of the request message are populated from the path, query parameters, or body of the HTTP request.
    /// The mapping is typically specified as an `google.api.http` annotation, see "google/api/annotations.proto" for
    /// details.
    ///
    /// The mapping consists of a field specifying the path template and method kind.  The path template can refer to
    /// fields in the request message, as in the example below which describes a REST GET operation on a resource
    /// collection of messages:
    ///
    /// service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http).get =
    /// "/v1/messages/{message_id}/{sub.subfield}"; } } message GetMessageRequest { message SubMessage { string subfield
    /// = 1; } string message_id = 1; // mapped to the URL SubMessage sub = 2;    // `sub.subfield` is url-mapped }
    /// message Message { string text = 1; // content of the resource }
    ///
    /// The same http annotation can alternatively be expressed inside the `GRPC API Configuration` YAML file.
    ///
    /// http: rules: - selector: .Messaging.GetMessage get: /v1/messages/{message_id}/{sub.subfield}
    ///
    /// This definition enables an automatic, bidrectional mapping of HTTP JSON to RPC. Example:
    ///
    /// HTTP | RPC -----|----- `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub:
    /// SubMessage(subfield: "foo"))`
    ///
    /// In general, not only fields but also field paths can be referenced from a path pattern. Fields mapped to the
    /// path pattern cannot be repeated and must have a primitive (non-message) type.
    ///
    /// Any fields in the request message which are not bound by the path pattern automatically become (optional) HTTP
    /// query parameters. Assume the following definition of the request message:
    ///
    /// message GetMessageRequest { message SubMessage { string subfield = 1; } string message_id = 1; // mapped to the
    /// URL int64 revision = 2;    // becomes a parameter SubMessage sub = 3;    // `sub.subfield` becomes a parameter }
    ///
    /// This enables a HTTP JSON to RPC mapping as below:
    ///
    /// HTTP | RPC -----|----- `GET /v1/messages/123456?revision=2=foo` | `GetMessage(message_id: "123456" revision: 2
    /// sub: SubMessage(subfield: "foo"))`
    ///
    /// Note that fields which are mapped to HTTP parameters must have a primitive type or a repeated primitive type.
    /// Message types are not allowed. In the case of a repeated type, the parameter can be repeated in the URL, as in
    /// `...?param=A=B`.
    ///
    /// For HTTP method kinds which allow a request body, the `body` field specifies the mapping. Consider a REST update
    /// method on the message resource collection:
    ///
    /// service Messaging { rpc UpdateMessage(UpdateMessageRequest) returns (Message) { option (google.api.http) = {
    /// put: "/v1/messages/{message_id}" body: "message" }; } } message UpdateMessageRequest { string message_id = 1; //
    /// mapped to the URL Message message = 2;   // mapped to the body }
    ///
    /// The following HTTP JSON to RPC mapping is enabled, where the representation of the JSON in the request body is
    /// determined by protos JSON encoding:
    ///
    /// HTTP | RPC -----|----- `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message
    /// { text: "Hi!" })`
    ///
    /// The special name `*` can be used in the body mapping to define that every field not bound by the path template
    /// should be mapped to the request body.  This enables the following alternative definition of the update method:
    ///
    /// service Messaging { rpc UpdateMessage(Message) returns (Message) { option (google.api.http) = { put:
    /// "/v1/messages/{message_id}" body: "*" }; } } message Message { string message_id = 1; string text = 2; }
    ///
    /// The following HTTP JSON to RPC mapping is enabled:
    ///
    /// HTTP | RPC -----|----- `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text:
    /// "Hi!")`
    ///
    /// Note that when using `*` in the body mapping, it is not possible to have HTTP parameters, as all fields not
    /// bound by the path end in the body. This makes this option more rarely used in practice of defining REST APIs.
    /// The common usage of `*` is in custom methods which don't use the URL at all for transferring data.
    ///
    /// It is possible to define multiple HTTP methods for one RPC by using the `additional_bindings` option. Example:
    ///
    /// service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get:
    /// "/v1/messages/{message_id}" additional_bindings { get: "/v1/users/{user_id}/messages/{message_id}" } }; } }
    /// message GetMessageRequest { string message_id = 1; string user_id = 2; }
    ///
    /// This enables the following two alternative HTTP JSON to RPC mappings:
    ///
    /// HTTP | RPC -----|----- `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` `GET
    /// /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
    ///
    /// # Rules for HTTP mapping
    ///
    /// The rules for mapping HTTP path, query parameters, and body fields to the request message are as follows:
    ///
    /// 1. The `body` field specifies either `*` or a field path, or is omitted. If omitted, it assumes there is no HTTP
    /// body. 2. Leaf fields (recursive expansion of nested messages in the request) can be classified into three types:
    /// (a) Matched in the URL template. (b) Covered by body (if body is `*`, everything except (a) fields; else
    /// everything under the body field) (c) All other fields. 3. URL query parameters found in the HTTP request are
    /// mapped to (c) fields. 4. Any body sent with an HTTP request can contain only (b) fields.
    ///
    /// The syntax of the path template is as follows:
    ///
    /// Template = "/" Segments [ Verb ] ; Segments = Segment { "/" Segment } ; Segment  = "*" | "**" | LITERAL |
    /// Variable ; Variable = "{" FieldPath [ "=" Segments ] "}" ; FieldPath = IDENT { "." IDENT } ; Verb     = ":"
    /// LITERAL ;
    ///
    /// The syntax `*` matches a single path segment. It follows the semantics of [RFC
    /// 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String Expansion.
    ///
    /// The syntax `**` matches zero or more path segments. It follows the semantics of [RFC
    /// 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved Expansion. NOTE: it must be the last segment
    /// in the path except the Verb.
    ///
    /// The syntax `LITERAL` matches literal text in the URL path.
    ///
    /// The syntax `Variable` matches the entire path as specified by its template; this nested template must not
    /// contain further variables. If a variable matches a single path segment, its template may be omitted, e.g.
    /// `{var}` is equivalent to `{var=*}`.
    ///
    /// NOTE: the field paths in variables and in the `body` must not refer to repeated fields or map fields.
    ///
    /// Use CustomHttpPattern to specify any HTTP method that is not included in the `pattern` field, such as HEAD, or
    /// "*" to leave the HTTP method unspecified for a given URL path rule. The wild-card rule is useful for services
    /// that provide content to Web (HTML) clients.</summary>
    public class HttpRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Additional HTTP bindings for the selector. Nested bindings must not contain an
        /// `additional_bindings` field themselves (that is, the nesting may only be one level deep).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalBindings")]
        public virtual System.Collections.Generic.IList<HttpRule> AdditionalBindings { get; set; } 

        /// <summary>The name of the request field whose value is mapped to the HTTP body, or `*` for mapping all fields
        /// not captured by the path pattern to the HTTP body. NOTE: the referred field must not be a repeated field and
        /// must be present at the top-level of request message type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("body")]
        public virtual string Body { get; set; } 

        /// <summary>Custom pattern is used for defining custom verbs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("custom")]
        public virtual CustomHttpPattern Custom { get; set; } 

        /// <summary>Used for deleting a resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("delete")]
        public virtual string Delete { get; set; } 

        /// <summary>Used for listing and getting information about resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("get")]
        public virtual string Get { get; set; } 

        /// <summary>Use this only for Scotty Requests. Do not use this for bytestream methods. For media support, add
        /// instead [][google.bytestream.RestByteStream] as an API to your configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mediaDownload")]
        public virtual MediaDownload MediaDownload { get; set; } 

        /// <summary>Use this only for Scotty Requests. Do not use this for media support using Bytestream, add instead
        /// [][google.bytestream.RestByteStream] as an API to your configuration for Bytestream methods.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mediaUpload")]
        public virtual MediaUpload MediaUpload { get; set; } 

        /// <summary>Used for updating a resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("patch")]
        public virtual string Patch { get; set; } 

        /// <summary>Used for creating a resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("post")]
        public virtual string Post { get; set; } 

        /// <summary>Used for updating a resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("put")]
        public virtual string Put { get; set; } 

        /// <summary>The name of the response field whose value is mapped to the HTTP body of response. Other response
        /// fields are ignored. This field is optional. When not set, the response message will be used as HTTP body of
        /// response. NOTE: the referred field must be not a repeated field and must be present at the top-level of
        /// response message type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseBody")]
        public virtual string ResponseBody { get; set; } 

        /// <summary>Selects methods to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A description of a label.</summary>
    public class LabelDescriptor : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A human-readable description for the label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The label key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>The type of data that can be assigned to the label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueType")]
        public virtual string ValueType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for Operations.ListOperations.</summary>
    public class ListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The standard List next-page token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>A list of operations that matches the specified filter in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for ListServiceConfigs method.</summary>
    public class ListServiceConfigsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The token of the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of service configuration resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceConfigs")]
        public virtual System.Collections.Generic.IList<Service> ServiceConfigs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for ListServiceRollouts method.</summary>
    public class ListServiceRolloutsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The token of the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of rollout resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rollouts")]
        public virtual System.Collections.Generic.IList<Rollout> Rollouts { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for `ListServices` method.</summary>
    public class ListServicesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Token that can be passed to `ListServices` to resume a paginated query.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The returned services will only have the name field set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<ManagedService> Services { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Specifies what kind of log the caller must write Increment a streamz counter with the specified metric
    /// and field names.
    ///
    /// Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not
    /// contain an initial slash. The actual exported metric names will have "/iam/policy" prepended.
    ///
    /// Field names correspond to IAM request parameters and field values are their respective values.
    ///
    /// At present the only supported field names are - "iam_principal", corresponding to IAMContext.principal; - ""
    /// (empty string), resulting in one aggretated counter with no field.
    ///
    /// Examples: counter { metric: "/debug_access_count"  field: "iam_principal" } ==> increment counter
    /// /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]}
    ///
    /// At this time we do not support: * multiple field names (though this may be supported in the future) *
    /// decrementing the counter * incrementing it by anything other than 1</summary>
    public class LogConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Cloud audit options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cloudAudit")]
        public virtual CloudAuditOptions CloudAudit { get; set; } 

        /// <summary>Counter options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("counter")]
        public virtual CounterOptions Counter { get; set; } 

        /// <summary>Data access options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataAccess")]
        public virtual DataAccessOptions DataAccess { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A description of a log type. Example in YAML format:
    ///
    /// - name: library.googleapis.com/activity_history description: The history of borrowing and returning library
    /// items. display_name: Activity labels: - key: /customer_id description: Identifier of a library
    /// customer</summary>
    public class LogDescriptor : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A human-readable description of this log. This information appears in the documentation and can
        /// contain details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The human-readable name for this log. This information appears on the user interface and should be
        /// concise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The set of labels that are available to describe a specific log entry. Runtime requests that
        /// contain labels not specified here are considered invalid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<LabelDescriptor> Labels { get; set; } 

        /// <summary>The name of the log. It must be less than 512 characters long and can include the following
        /// characters: upper- and lower-case alphanumeric characters [A-Za-z0-9], and punctuation characters including
        /// slash, underscore, hyphen, period [/_-.].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Logging configuration of the service.
    ///
    /// The following example shows how to configure logs to be sent to the producer and consumer projects. In the
    /// example, the `activity_history` log is sent to both the producer and consumer projects, whereas the
    /// `purchase_history` log is only sent to the producer project.
    ///
    /// monitored_resources: - type: library.googleapis.com/branch labels: - key: /city description: The city where the
    /// library branch is located in. - key: /name description: The name of the branch. logs: - name: activity_history
    /// labels: - key: /customer_id - name: purchase_history logging: producer_destinations: - monitored_resource:
    /// library.googleapis.com/branch logs: - activity_history - purchase_history consumer_destinations: -
    /// monitored_resource: library.googleapis.com/branch logs: - activity_history</summary>
    public class Logging : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Logging configurations for sending logs to the consumer project. There can be multiple consumer
        /// destinations, each one must have a different monitored resource type. A log can be used in at most one
        /// consumer destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumerDestinations")]
        public virtual System.Collections.Generic.IList<LoggingDestination> ConsumerDestinations { get; set; } 

        /// <summary>Logging configurations for sending logs to the producer project. There can be multiple producer
        /// destinations, each one must have a different monitored resource type. A log can be used in at most one
        /// producer destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerDestinations")]
        public virtual System.Collections.Generic.IList<LoggingDestination> ProducerDestinations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration of a specific logging destination (the producer project or the consumer
    /// project).</summary>
    public class LoggingDestination : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Names of the logs to be sent to this destination. Each name must be defined in the Service.logs
        /// section. If the log name is not a domain scoped name, it will be automatically prefixed with the service
        /// name followed by "/".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logs")]
        public virtual System.Collections.Generic.IList<string> Logs { get; set; } 

        /// <summary>The monitored resource type. The type must be defined in the Service.monitored_resources
        /// section.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("monitoredResource")]
        public virtual string MonitoredResource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The full representation of a Service that is managed by Google Service Management.</summary>
    public class ManagedService : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ID of the project that produces and owns this service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerProjectId")]
        public virtual string ProducerProjectId { get; set; } 

        /// <summary>The name of the service. See the [overview](/service-management/overview) for naming
        /// requirements.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceName")]
        public virtual string ServiceName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Use this only for Scotty Requests. Do not use this for media support using Bytestream, add instead
    /// [][google.bytestream.RestByteStream] as an API to your configuration for Bytestream methods.</summary>
    public class MediaDownload : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.
        ///
        /// Specify name of the download service if one is used for download.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("downloadService")]
        public virtual string DownloadService { get; set; } 

        /// <summary>Whether download is enabled.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enabled")]
        public virtual System.Nullable<bool> Enabled { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Use this only for Scotty Requests. Do not use this for media support using Bytestream, add instead
    /// [][google.bytestream.RestByteStream] as an API to your configuration for Bytestream methods.</summary>
    public class MediaUpload : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether upload is enabled.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enabled")]
        public virtual System.Nullable<bool> Enabled { get; set; } 

        /// <summary>DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.
        ///
        /// Specify name of the upload service if one is used for upload.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uploadService")]
        public virtual string UploadService { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Method represents a method of an api.</summary>
    public class Method : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The simple name of this method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Any metadata attached to the method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>If true, the request is streamed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestStreaming")]
        public virtual System.Nullable<bool> RequestStreaming { get; set; } 

        /// <summary>A URL of the input message type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestTypeUrl")]
        public virtual string RequestTypeUrl { get; set; } 

        /// <summary>If true, the response is streamed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseStreaming")]
        public virtual System.Nullable<bool> ResponseStreaming { get; set; } 

        /// <summary>The URL of the output message type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseTypeUrl")]
        public virtual string ResponseTypeUrl { get; set; } 

        /// <summary>The source syntax of this method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("syntax")]
        public virtual string Syntax { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it
    /// stops data collection and makes the metric type's existing data unusable.</summary>
    public class MetricDescriptor : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A detailed description of the metric, which can be used in documentation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>A concise name for the metric, which can be displayed in user interfaces. Use sentence case without
        /// an ending period, for example "Request count".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The set of labels that can be used to describe a specific instance of this metric type. For
        /// example, the `appengine.googleapis.com/http/server/response_latencies` metric type has a label for the HTTP
        /// response code, `response_code`, so you can look at latencies for successful responses or just for responses
        /// that failed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<LabelDescriptor> Labels { get; set; } 

        /// <summary>Whether the metric records instantaneous values, changes to a value, etc. Some combinations of
        /// `metric_kind` and `value_type` might not be supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metricKind")]
        public virtual string MetricKind { get; set; } 

        /// <summary>The resource name of the metric descriptor. Depending on the implementation, the name typically
        /// includes: (1) the parent resource name that defines the scope of the metric type or of its data; and (2) the
        /// metric's URL-encoded type, which also appears in the `type` field of this descriptor. For example, following
        /// is the resource name of a custom metric within the GCP project `my-project-id`:
        ///
        /// "projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The metric type, including its DNS name prefix. The type is not URL-encoded.  All user-defined
        /// custom metric types have the DNS name `custom.googleapis.com`.  Metric types should use a natural
        /// hierarchical grouping. For example:
        ///
        /// "custom.googleapis.com/invoice/paid/amount"
        /// "appengine.googleapis.com/http/server/response_latencies"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The unit in which the metric value is reported. It is only applicable if the `value_type` is
        /// `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of
        /// Measure](http://unitsofmeasure.org/ucum.html) standard:
        ///
        /// **Basic units (UNIT)**
        ///
        /// * `bit`   bit * `By`    byte * `s`     second * `min`   minute * `h`     hour * `d`     day
        ///
        /// **Prefixes (PREFIX)**
        ///
        /// * `k`     kilo    (10**3) * `M`     mega    (10**6) * `G`     giga    (10**9) * `T`     tera    (10**12) *
        /// `P`     peta    (10**15) * `E`     exa     (10**18) * `Z`     zetta   (10**21) * `Y`     yotta   (10**24) *
        /// `m`     milli   (10**-3) * `u`     micro   (10**-6) * `n`     nano    (10**-9) * `p`     pico    (10**-12) *
        /// `f`     femto   (10**-15) * `a`     atto    (10**-18) * `z`     zepto   (10**-21) * `y`     yocto
        /// (10**-24) * `Ki`    kibi    (2**10) * `Mi`    mebi    (2**20) * `Gi`    gibi    (2**30) * `Ti`    tebi
        /// (2**40)
        ///
        /// **Grammar**
        ///
        /// The grammar includes the dimensionless unit `1`, such as `1/s`.
        ///
        /// The grammar also includes these connectors:
        ///
        /// * `/`    division (as an infix operator, e.g. `1/s`). * `.`    multiplication (as an infix operator, e.g.
        /// `GBy.d`)
        ///
        /// The grammar for a unit is as follows:
        ///
        /// Expression = Component { "." Component } { "/" Component } ;
        ///
        /// Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ;
        ///
        /// Annotation = "{" NAME "}" ;
        ///
        /// Notes:
        ///
        /// * `Annotation` is just a comment if it follows a `UNIT` and is equivalent to `1` if it is used alone. For
        /// examples, `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable
        /// ASCII characters not containing '{' or '}'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; } 

        /// <summary>Whether the measurement is an integer, a floating-point number, etc. Some combinations of
        /// `metric_kind` and `value_type` might not be supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueType")]
        public virtual string ValueType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Declares an API to be included in this API. The including API must redeclare all the methods from the
    /// included API, but documentation and options are inherited as follows:
    ///
    /// - If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will
    /// be inherited from the original method.
    ///
    /// - Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method
    /// will be inherited.
    ///
    /// - If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be
    /// replaced by the version of the including API plus the root path if specified.
    ///
    /// Example of a simple mixin:
    ///
    /// package google.acl.v1; service AccessControl { // Get the underlying ACL object. rpc GetAcl(GetAclRequest)
    /// returns (Acl) { option (google.api.http).get = "/v1/{resource=**}:getAcl"; } }
    ///
    /// package google.storage.v2; service Storage { //       rpc GetAcl(GetAclRequest) returns (Acl);
    ///
    /// // Get a data record. rpc GetData(GetDataRequest) returns (Data) { option (google.api.http).get =
    /// "/v2/{resource=**}"; } }
    ///
    /// Example of a mixin configuration:
    ///
    /// apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl
    ///
    /// The mixin construct implies that all methods in `AccessControl` are also declared with same name and
    /// request/response types in `Storage`. A documentation generator or annotation processor will see the effective
    /// `Storage.GetAcl` method after inherting documentation and annotations as follows:
    ///
    /// service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option
    /// (google.api.http).get = "/v2/{resource=**}:getAcl"; } ... }
    ///
    /// Note how the version in the path pattern changed from `v1` to `v2`.
    ///
    /// If the `root` field in the mixin is specified, it should be a relative path under which inherited HTTP paths are
    /// placed. Example:
    ///
    /// apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl root: acls
    ///
    /// This implies the following inherited HTTP annotation:
    ///
    /// service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option
    /// (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; } ... }</summary>
    public class Mixin : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fully qualified name of the API which is included.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>If non-empty specifies a path under which inherited HTTP paths are rooted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("root")]
        public virtual string Root { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An object that describes the schema of a MonitoredResource object using a type name and a set of
    /// labels.  For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of
    /// `"gce_instance"` and specifies the use of the labels `"instance_id"` and `"zone"` to identify particular VM
    /// instances.
    ///
    /// Different APIs can support different monitored resource types. APIs generally provide a `list` method that
    /// returns the monitored resource descriptors used by the API.</summary>
    public class MonitoredResourceDescriptor : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Optional. A detailed description of the monitored resource type that might be used in
        /// documentation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Optional. A concise name for the monitored resource type that might be displayed in user
        /// interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example,
        /// `"Google Cloud SQL Database"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>Required. A set of labels used to describe instances of this monitored resource type. For example,
        /// an individual Google Cloud SQL database is identified by values for the labels `"database_id"` and
        /// `"zone"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<LabelDescriptor> Labels { get; set; } 

        /// <summary>Optional. The resource name of the monitored resource descriptor:
        /// `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where {type} is the value of the `type` field
        /// in this object and {project_id} is a project ID that provides API-specific context for accessing the type.
        /// APIs that do not use project information can use the resource name format
        /// `"monitoredResourceDescriptors/{type}"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Required. The monitored resource type. For example, the type `"cloudsql_database"` represents
        /// databases in Google Cloud SQL. The maximum length of this value is 256 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Monitoring configuration of the service.
    ///
    /// The example below shows how to configure monitored resources and metrics for monitoring. In the example, a
    /// monitored resource and two metrics are defined. The `library.googleapis.com/book/returned_count` metric is sent
    /// to both producer and consumer projects, whereas the `library.googleapis.com/book/overdue_count` metric is only
    /// sent to the consumer project.
    ///
    /// monitored_resources: - type: library.googleapis.com/branch labels: - key: /city description: The city where the
    /// library branch is located in. - key: /name description: The name of the branch. metrics: - name:
    /// library.googleapis.com/book/returned_count metric_kind: DELTA value_type: INT64 labels: - key: /customer_id -
    /// name: library.googleapis.com/book/overdue_count metric_kind: GAUGE value_type: INT64 labels: - key: /customer_id
    /// monitoring: producer_destinations: - monitored_resource: library.googleapis.com/branch metrics: -
    /// library.googleapis.com/book/returned_count consumer_destinations: - monitored_resource:
    /// library.googleapis.com/branch metrics: - library.googleapis.com/book/returned_count -
    /// library.googleapis.com/book/overdue_count</summary>
    public class Monitoring : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Monitoring configurations for sending metrics to the consumer project. There can be multiple
        /// consumer destinations, each one must have a different monitored resource type. A metric can be used in at
        /// most one consumer destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumerDestinations")]
        public virtual System.Collections.Generic.IList<MonitoringDestination> ConsumerDestinations { get; set; } 

        /// <summary>Monitoring configurations for sending metrics to the producer project. There can be multiple
        /// producer destinations, each one must have a different monitored resource type. A metric can be used in at
        /// most one producer destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerDestinations")]
        public virtual System.Collections.Generic.IList<MonitoringDestination> ProducerDestinations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration of a specific monitoring destination (the producer project or the consumer
    /// project).</summary>
    public class MonitoringDestination : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Names of the metrics to report to this monitoring destination. Each name must be defined in
        /// Service.metrics section.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metrics")]
        public virtual System.Collections.Generic.IList<string> Metrics { get; set; } 

        /// <summary>The monitored resource type. The type must be defined in Service.monitored_resources
        /// section.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("monitoredResource")]
        public virtual string MonitoredResource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>OAuth scopes are a way to define data and permissions on data. For example, there are scopes defined
    /// for "Read-only access to Google Calendar" and "Access to Cloud Platform". Users can consent to a scope for an
    /// application, giving it permission to access that data on their behalf.
    ///
    /// OAuth scope specifications should be fairly coarse grained; a user will need to see and understand the text
    /// description of what your scope means.
    ///
    /// In most cases: use one or at most two OAuth scopes for an entire family of products. If your product has
    /// multiple APIs, you should probably be sharing the OAuth scope across all of those APIs.
    ///
    /// When you need finer grained OAuth consent screens: talk with your product management about how developers will
    /// use them in practice.
    ///
    /// Please note that even though each of the canonical scopes is enough for a request to be accepted and passed to
    /// the backend, a request can still fail due to the backend requiring additional scopes or permissions.</summary>
    public class OAuthRequirements : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of publicly documented OAuth scopes that are allowed access. An OAuth token containing any
        /// of these scopes will be accepted.
        ///
        /// Example:
        ///
        /// canonical_scopes: https://www.googleapis.com/auth/calendar,
        /// https://www.googleapis.com/auth/calendar.read</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("canonicalScopes")]
        public virtual string CanonicalScopes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>The error result of the operation in case of failure or cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; } 

        /// <summary>Service-specific metadata associated with the operation.  It typically contains progress
        /// information and common metadata such as create time. Some services might not provide such metadata.  Any
        /// method that returns a long-running operation should document the metadata type, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
        /// If you use the default HTTP mapping, the `name` should have the format of
        /// `operations/some/unique/name`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The normal response of the operation in case of success.  If the original method returns no data on
        /// success, such as `Delete`, the response is `google.protobuf.Empty`.  If the original method is standard
        /// `Get`/`Create`/`Update`, the response should be the resource.  For other methods, the response should have
        /// the type `XxxResponse`, where `Xxx` is the original method name.  For example, if the original method name
        /// is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The metadata associated with a long running operation resource.</summary>
    public class OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Percentage of completion of this operation, ranging from 0 to 100.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("progressPercentage")]
        public virtual System.Nullable<int> ProgressPercentage { get; set; } 

        /// <summary>The full name of the resources that this operation is directly associated with.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resourceNames")]
        public virtual System.Collections.Generic.IList<string> ResourceNames { get; set; } 

        /// <summary>The start time of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>Detailed status information for each step. The order is undetermined.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("steps")]
        public virtual System.Collections.Generic.IList<Step> Steps { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A protocol buffer option, which can be attached to a message, field, enumeration, etc.</summary>
    public class Option : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The option's name. For protobuf built-in options (options defined in descriptor.proto), this is the
        /// short name. For example, `"map_entry"`. For custom options, it should be the fully-qualified name. For
        /// example, `"google.api.http"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The option's value packed in an Any message. If the value is a primitive, the corresponding wrapper
        /// type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored
        /// as an int32 value using the google.protobuf.Int32Value type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Collections.Generic.IDictionary<string,object> Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a documentation page. A page can contain subpages to represent nested documentation set
    /// structure.</summary>
    public class Page : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The Markdown content of the page. You can use == include {path} == to include content from a
        /// Markdown file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>The name of the page. It will be used as an identity of the page to generate URI of the page, text
        /// of the link to this page in navigation, etc. The full page name (start from the root page name to this page
        /// concatenated with `.`) can be used as reference to the page in your documentation. For example: pages: -
        /// name: Tutorial content: == include tutorial.md == subpages: - name: Java content: == include
        /// tutorial_java.md ==
        ///
        /// You can reference `Java` page using Markdown reference link syntax: `Java`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Subpages of this page. The order of subpages specified here will be honored in the generated
        /// docset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subpages")]
        public virtual System.Collections.Generic.IList<Page> Subpages { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies
    /// for Cloud Platform resources.
    ///
    /// A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the
    /// members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of
    /// permissions defined by IAM.
    ///
    /// **Example**
    ///
    /// { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com",
    /// "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer",
    /// "members": ["user:sean@example.com"] } ] }
    ///
    /// For a description of IAM and its features, see the [IAM developer's
    /// guide](https://cloud.google.com/iam).</summary>
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies cloud audit logging configuration for this policy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("auditConfigs")]
        public virtual System.Collections.Generic.IList<AuditConfig> AuditConfigs { get; set; } 

        /// <summary>Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same
        /// `role`. `bindings` with no members will result in an error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; } 

        /// <summary>`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of
        /// a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the
        /// read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned
        /// in the response to `getIamPolicy`, and systems are expected to put that etag in the request to
        /// `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        ///
        /// If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten
        /// blindly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("iamOwned")]
        public virtual System.Nullable<bool> IamOwned { get; set; } 

        /// <summary>If more than one rule is specified, the rules are applied in the following manner: - All matching
        /// LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will
        /// be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule
        /// matches, permission is granted. Logging will be applied if one or more matching rule requires logging. -
        /// Otherwise, if no rule applies, permission is denied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<Rule> Rules { get; set; } 

        /// <summary>Version of the `Policy`. The default version is 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; } 

    }    

    /// <summary>A rollout resource that defines how service configuration versions are pushed to control plane systems.
    /// Typically, you create a new version of the service config, and then create a Rollout to push the service
    /// config.</summary>
    public class Rollout : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Creation time of the rollout. Readonly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The user who created the Rollout. Readonly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createdBy")]
        public virtual string CreatedBy { get; set; } 

        /// <summary>The strategy associated with a rollout to delete a `ManagedService`. Readonly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteServiceStrategy")]
        public virtual DeleteServiceStrategy DeleteServiceStrategy { get; set; } 

        /// <summary>Optional unique identifier of this Rollout. Only lower case letters, digits and '-' are allowed.
        ///
        /// If not specified by client, the server will generate one. The generated id will have the form of , where
        /// "date" is the create date in ISO 8601 format.  "revision number" is a monotonically increasing positive
        /// number that is reset every day for each service. An example of the generated rollout_id is
        /// '2016-02-16r1'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rolloutId")]
        public virtual string RolloutId { get; set; } 

        /// <summary>The name of the service associated with this Rollout.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceName")]
        public virtual string ServiceName { get; set; } 

        /// <summary>The status of this rollout. Readonly. In case of a failed rollout, the system will automatically
        /// rollback to the current Rollout version. Readonly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>Google Service Control selects service configurations based on traffic percentage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trafficPercentStrategy")]
        public virtual TrafficPercentStrategy TrafficPercentStrategy { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A rule to be applied in a Policy.</summary>
    public class Rule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual string Action { get; set; } 

        /// <summary>Additional restrictions that must be met</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conditions")]
        public virtual System.Collections.Generic.IList<Condition> Conditions { get; set; } 

        /// <summary>Human-readable description of the rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>If one or more 'in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is
        /// in at least one of these entries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("in")]
        public virtual System.Collections.Generic.IList<string> In__ { get; set; } 

        /// <summary>The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG
        /// action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logConfig")]
        public virtual System.Collections.Generic.IList<LogConfig> LogConfig { get; set; } 

        /// <summary>If one or more 'not_in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR
        /// is in none of the entries. The format for in and not_in entries is the same as for members in a Binding (see
        /// google/iam/v1/policy.proto).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("notIn")]
        public virtual System.Collections.Generic.IList<string> NotIn { get; set; } 

        /// <summary>A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all
        /// permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Service` is the root object of Google service configuration schema. It describes basic information
    /// about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section
    /// is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each
    /// proto message definition for details.
    ///
    /// Example:
    ///
    /// type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: -
    /// name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri:
    /// https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: "*"
    /// requirements: provider_id: google_calendar_auth</summary>
    public class Service : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api
        /// needs to be provided by the configuration author, as the remaining fields will be derived from the IDL
        /// during the normalization process. It is an error to specify an API interface here which cannot be resolved
        /// against the associated IDL files.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("apis")]
        public virtual System.Collections.Generic.IList<Api> Apis { get; set; } 

        /// <summary>Auth configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("authentication")]
        public virtual Authentication Authentication { get; set; } 

        /// <summary>API backend configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("backend")]
        public virtual Backend Backend { get; set; } 

        /// <summary>The version of the service configuration. The config version may influence interpretation of the
        /// configuration, for example, to determine defaults. This is documented together with applicable options. The
        /// current default for the config version itself is `3`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("configVersion")]
        public virtual System.Nullable<long> ConfigVersion { get; set; } 

        /// <summary>Context configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("context")]
        public virtual Context Context { get; set; } 

        /// <summary>Configuration for the service control plane.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("control")]
        public virtual Control Control { get; set; } 

        /// <summary>Custom error configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customError")]
        public virtual CustomError CustomError { get; set; } 

        /// <summary>Additional API documentation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentation")]
        public virtual Documentation Documentation { get; set; } 

        /// <summary>Configuration for network endpoints.  If this is empty, then an endpoint with the same name as the
        /// service is automatically generated to service all defined APIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endpoints")]
        public virtual System.Collections.Generic.IList<Endpoint> Endpoints { get; set; } 

        /// <summary>A list of all enum types included in this API service.  Enums referenced directly or indirectly by
        /// the `apis` are automatically included.  Enums which are not referenced but shall be included should be
        /// listed here by name. Example:
        ///
        /// enums: - name: google.someapi.v1.SomeEnum</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enums")]
        public virtual System.Collections.Generic.IList<Enum> Enums { get; set; } 

        /// <summary>Experimental configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("experimental")]
        public virtual Experimental Experimental { get; set; } 

        /// <summary>HTTP configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("http")]
        public virtual Http Http { get; set; } 

        /// <summary>A unique ID for a specific instance of this message, typically assigned by the client for tracking
        /// purpose. If empty, the server may choose to generate one instead.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Logging configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logging")]
        public virtual Logging Logging { get; set; } 

        /// <summary>Defines the logs used by this service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logs")]
        public virtual System.Collections.Generic.IList<LogDescriptor> Logs { get; set; } 

        /// <summary>Defines the metrics used by this service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metrics")]
        public virtual System.Collections.Generic.IList<MetricDescriptor> Metrics { get; set; } 

        /// <summary>Defines the monitored resources used by this service. This is required by the Service.monitoring
        /// and Service.logging configurations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("monitoredResources")]
        public virtual System.Collections.Generic.IList<MonitoredResourceDescriptor> MonitoredResources { get; set; } 

        /// <summary>Monitoring configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("monitoring")]
        public virtual Monitoring Monitoring { get; set; } 

        /// <summary>The DNS address at which this service is available, e.g. `calendar.googleapis.com`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The id of the Google developer project that owns the service. Members of this project can manage
        /// the service configuration, manage consumption of the service, etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerProjectId")]
        public virtual string ProducerProjectId { get; set; } 

        /// <summary>Output only. The source information for this configuration if available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceInfo")]
        public virtual SourceInfo SourceInfo { get; set; } 

        /// <summary>System parameter configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemParameters")]
        public virtual SystemParameters SystemParameters { get; set; } 

        /// <summary>A list of all proto message types included in this API service. It serves similar purpose as
        /// [google.api.Service.types], except that these types are not needed by user-defined APIs. Therefore, they
        /// will not show up in the generated discovery doc. This field should only be used to define system APIs in
        /// ESF.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemTypes")]
        public virtual System.Collections.Generic.IList<Type> SystemTypes { get; set; } 

        /// <summary>The product title associated with this service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>A list of all proto message types included in this API service. Types referenced directly or
        /// indirectly by the `apis` are automatically included.  Messages which are not referenced but shall be
        /// included, such as types used by the `google.protobuf.Any` type, should be listed here by name. Example:
        ///
        /// types: - name: google.protobuf.Int32</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("types")]
        public virtual System.Collections.Generic.IList<Type> Types { get; set; } 

        /// <summary>Configuration controlling usage of this service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("usage")]
        public virtual Usage Usage { get; set; } 

        /// <summary>API visibility configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("visibility")]
        public virtual Visibility Visibility { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `SetIamPolicy` method.</summary>
    public class SetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to
        /// a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects)
        /// might reject them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual Policy Policy { get; set; } 

        /// <summary>OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask
        /// will be modified. If no mask is provided, the following default mask is used: paths: "bindings, etag" This
        /// field is only used by Cloud IAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateMask")]
        public virtual object UpdateMask { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`SourceContext` represents information about the source of a protobuf element, like the file in which
    /// it is defined.</summary>
    public class SourceContext : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The path-qualified name of the .proto file that contained the associated protobuf element.  For
        /// example: `"google/protobuf/source_context.proto"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fileName")]
        public virtual string FileName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Source information used to create a Service Config</summary>
    public class SourceInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>All files used during config generation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceFiles")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> SourceFiles { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the status of one operation step.</summary>
    public class Step : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The short description of the step.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The status code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for SubmitConfigSource method.</summary>
    public class SubmitConfigSourceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The source configuration for the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("configSource")]
        public virtual ConfigSource ConfigSource { get; set; } 

        /// <summary>Optional. If set, this will result in the generation of a `google.api.Service` configuration based
        /// on the `ConfigSource` provided, but the generated config and the sources will NOT be persisted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("validateOnly")]
        public virtual System.Nullable<bool> ValidateOnly { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for SubmitConfigSource method.</summary>
    public class SubmitConfigSourceResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The generated service configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceConfig")]
        public virtual Service ServiceConfig { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Define a parameter's name and location. The parameter may be passed as either an HTTP header or a URL
    /// query parameter, and if both are passed the behavior is implementation-dependent.</summary>
    public class SystemParameter : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Define the HTTP header name to use for the parameter. It is case insensitive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpHeader")]
        public virtual string HttpHeader { get; set; } 

        /// <summary>Define the name of the parameter, such as "api_key" . It is case sensitive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Define the URL query parameter name to use for the parameter. It is case sensitive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("urlQueryParameter")]
        public virtual string UrlQueryParameter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Define a system parameter rule mapping system parameter definitions to methods.</summary>
    public class SystemParameterRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Define parameters. Multiple names may be defined for a parameter. For a given method call, only one
        /// of them should be used. If multiple names are used the behavior is implementation-dependent. If none of the
        /// specified names are present the behavior is parameter-dependent.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IList<SystemParameter> Parameters { get; set; } 

        /// <summary>Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>### System parameter configuration
    ///
    /// A system parameter is a special kind of parameter defined by the API system, not by an individual API. It is
    /// typically mapped to an HTTP header and/or a URL query parameter. This configuration specifies which methods
    /// change the names of the system parameters.</summary>
    public class SystemParameters : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Define system parameters.
        ///
        /// The parameters defined here will override the default parameters implemented by the system. If this field is
        /// missing from the service config, default system parameters will be used. Default system parameters and names
        /// is implementation-dependent.
        ///
        /// Example: define api key for all methods
        ///
        /// system_parameters rules: - selector: "*" parameters: - name: api_key url_query_parameter: api_key
        ///
        /// Example: define 2 api key names for a specific method.
        ///
        /// system_parameters rules: - selector: "/ListShelves" parameters: - name: api_key http_header: Api-Key1 -
        /// name: api_key http_header: Api-Key2
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<SystemParameterRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or
        /// 'storage.*') are not allowed. For more information see [IAM
        /// Overview](https://cloud.google.com/iam/docs/overview#permissions).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A subset of `TestPermissionsRequest.permissions` that the caller is allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Strategy that specifies how Google Service Control should select different versions of service
    /// configurations based on traffic percentage.
    ///
    /// One example of how to gradually rollout a new service configuration using this strategy: Day 1
    ///
    /// Rollout { id: "example.googleapis.com/rollout_20160206" traffic_percent_strategy { percentages: {
    /// "example.googleapis.com/20160201": 70.00 "example.googleapis.com/20160206": 30.00 } } }
    ///
    /// Day 2
    ///
    /// Rollout { id: "example.googleapis.com/rollout_20160207" traffic_percent_strategy: { percentages: {
    /// "example.googleapis.com/20160206": 100.00 } } }</summary>
    public class TrafficPercentStrategy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Maps service configuration IDs to their corresponding traffic percentage. Key is the service
        /// configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to
        /// 100.0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("percentages")]
        public virtual System.Collections.Generic.IDictionary<string,System.Nullable<double>> Percentages { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A protocol buffer message type.</summary>
    public class Type : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of fields.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual System.Collections.Generic.IList<Field> Fields { get; set; } 

        /// <summary>The fully qualified message name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The list of types appearing in `oneof` definitions in this type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oneofs")]
        public virtual System.Collections.Generic.IList<string> Oneofs { get; set; } 

        /// <summary>The protocol buffer options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<Option> Options { get; set; } 

        /// <summary>The source context.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceContext")]
        public virtual SourceContext SourceContext { get; set; } 

        /// <summary>The source syntax.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("syntax")]
        public virtual string Syntax { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for UndeleteService method.</summary>
    public class UndeleteServiceResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Revived service resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual ManagedService Service { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration controlling usage of a service.</summary>
    public class Usage : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The full resource name of a channel used for sending notifications to the service producer.
        ///
        /// Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as
        /// a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub
        /// topic that uses the Cloud Pub/Sub topic name format documented in
        /// https://cloud.google.com/pubsub/docs/overview.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerNotificationChannel")]
        public virtual string ProducerNotificationChannel { get; set; } 

        /// <summary>Requirements that must be satisfied before a consumer project can use the service. Each requirement
        /// is of the form /; for example 'serviceusage.googleapis.com/billing-enabled'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requirements")]
        public virtual System.Collections.Generic.IList<string> Requirements { get; set; } 

        /// <summary>A list of usage rules that apply to individual API methods.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<UsageRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Usage configuration rules for the service.
    ///
    /// NOTE: Under development.
    ///
    /// Use this rule to configure unregistered calls for the service. Unregistered calls are calls that do not contain
    /// consumer project identity. (Example: calls that do not contain an API key). By default, API methods do not allow
    /// unregistered calls, and each method call must be identified by a consumer project identity. Use this rule to
    /// allow/disallow unregistered calls.
    ///
    /// Example of an API that wants to allow unregistered calls for entire service.
    ///
    /// usage: rules: - selector: "*" allow_unregistered_calls: true
    ///
    /// Example of a method that wants to allow unregistered calls.
    ///
    /// usage: rules: - selector: "google.example.library.v1.LibraryService.CreateBook" allow_unregistered_calls:
    /// true</summary>
    public class UsageRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True, if the method allows unregistered calls; false otherwise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowUnregisteredCalls")]
        public virtual System.Nullable<bool> AllowUnregisteredCalls { get; set; } 

        /// <summary>Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`Visibility` defines restrictions for the visibility of service elements.  Restrictions are specified
    /// using visibility labels (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
    ///
    /// Users and projects can have access to more than one visibility label. The effective visibility for multiple
    /// labels is the union of each label's elements, plus any unrestricted elements.
    ///
    /// If an element and its parents have no restrictions, visibility is unconditionally granted.
    ///
    /// Example:
    ///
    /// visibility: rules: - selector: google.calendar.Calendar.EnhancedSearch restriction: TRUSTED_TESTER - selector:
    /// google.calendar.Calendar.Delegate restriction: GOOGLE_INTERNAL
    ///
    /// Here, all methods are publicly visible except for the restricted methods EnhancedSearch and Delegate.</summary>
    public class Visibility : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of visibility rules that apply to individual API elements.
        ///
        /// **NOTE:** All service configuration rules follow "last one wins" order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<VisibilityRule> Rules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A visibility rule provides visibility configuration for an individual API element.</summary>
    public class VisibilityRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A comma-separated list of visibility labels that apply to the `selector`. Any of the listed labels
        /// can be used to grant the visibility.
        ///
        /// If a rule has multiple labels, removing one of the labels but not all of them can break clients.
        ///
        /// Example:
        ///
        /// visibility: rules: - selector: google.calendar.Calendar.EnhancedSearch restriction: GOOGLE_INTERNAL,
        /// TRUSTED_TESTER
        ///
        /// Removing GOOGLE_INTERNAL from this restriction will break clients that rely on this method and only had
        /// access to it through GOOGLE_INTERNAL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("restriction")]
        public virtual string Restriction { get; set; } 

        /// <summary>Selects methods, messages, fields, enums, etc. to which this rule applies.
        ///
        /// Refer to selector for syntax details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selector")]
        public virtual string Selector { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
